/*
 * Android Notifier Desktop is a multiplatform remote notification client for Android devices.
 *
 * Copyright (C) 2010  Leandro Aparecido
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation version 3 of the License.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: android-notifier.proto

package com.notifier.protocol;

public final class Protocol {
  private Protocol() {}
  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistryLite registry) {
  }
  public static final class Notification extends
      com.google.protobuf.GeneratedMessageLite {
    // Use Notification.newBuilder() to construct.
    private Notification() {
      initFields();
    }
    private Notification(boolean noInit) {}
    
    private static final Notification defaultInstance;
    public static Notification getDefaultInstance() {
      return defaultInstance;
    }
    
    public Notification getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public enum Type
        implements com.google.protobuf.Internal.EnumLite {
      RING(0, 0),
      SMS(1, 1),
      MMS(2, 2),
      BATTERY(3, 3),
      VOICEMAIL(4, 4),
      PING(5, 5),
      USER(6, 6),
      ;
      
      
      public final int getNumber() { return value; }
      
      public static Type valueOf(int value) {
        switch (value) {
          case 0: return RING;
          case 1: return SMS;
          case 2: return MMS;
          case 3: return BATTERY;
          case 4: return VOICEMAIL;
          case 5: return PING;
          case 6: return USER;
          default: return null;
        }
      }
      
      public static com.google.protobuf.Internal.EnumLiteMap<Type>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<Type>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<Type>() {
              public Type findValueByNumber(int number) {
                return Type.valueOf(number)
      ;        }
            };
      
      private final int index;
      private final int value;
      private Type(int index, int value) {
        this.index = index;
        this.value = value;
      }
      
      // @@protoc_insertion_point(enum_scope:android_notifier.Notification.Type)
    }
    
    // required fixed64 device_id = 1;
    public static final int DEVICE_ID_FIELD_NUMBER = 1;
    private boolean hasDeviceId;
    private long deviceId_ = 0L;
    public boolean hasDeviceId() { return hasDeviceId; }
    public long getDeviceId() { return deviceId_; }
    
    // required fixed64 id = 2;
    public static final int ID_FIELD_NUMBER = 2;
    private boolean hasId;
    private long id_ = 0L;
    public boolean hasId() { return hasId; }
    public long getId() { return id_; }
    
    // required .android_notifier.Notification.Type type = 3;
    public static final int TYPE_FIELD_NUMBER = 3;
    private boolean hasType;
    private com.notifier.protocol.Protocol.Notification.Type type_;
    public boolean hasType() { return hasType; }
    public com.notifier.protocol.Protocol.Notification.Type getType() { return type_; }
    
    // optional string description = 4;
    public static final int DESCRIPTION_FIELD_NUMBER = 4;
    private boolean hasDescription;
    private java.lang.String description_ = "";
    public boolean hasDescription() { return hasDescription; }
    public java.lang.String getDescription() { return description_; }
    
    // optional string title = 5;
    public static final int TITLE_FIELD_NUMBER = 5;
    private boolean hasTitle;
    private java.lang.String title_ = "";
    public boolean hasTitle() { return hasTitle; }
    public java.lang.String getTitle() { return title_; }
    
    // optional bytes icon = 6;
    public static final int ICON_FIELD_NUMBER = 6;
    private boolean hasIcon;
    private com.google.protobuf.ByteString icon_ = com.google.protobuf.ByteString.EMPTY;
    public boolean hasIcon() { return hasIcon; }
    public com.google.protobuf.ByteString getIcon() { return icon_; }
    
    // optional int32 battery_level = 7;
    public static final int BATTERY_LEVEL_FIELD_NUMBER = 7;
    private boolean hasBatteryLevel;
    private int batteryLevel_ = 0;
    public boolean hasBatteryLevel() { return hasBatteryLevel; }
    public int getBatteryLevel() { return batteryLevel_; }
    
    // optional string phone_number = 8;
    public static final int PHONE_NUMBER_FIELD_NUMBER = 8;
    private boolean hasPhoneNumber;
    private java.lang.String phoneNumber_ = "";
    public boolean hasPhoneNumber() { return hasPhoneNumber; }
    public java.lang.String getPhoneNumber() { return phoneNumber_; }
    
    // optional string third_party_data = 9;
    public static final int THIRD_PARTY_DATA_FIELD_NUMBER = 9;
    private boolean hasThirdPartyData;
    private java.lang.String thirdPartyData_ = "";
    public boolean hasThirdPartyData() { return hasThirdPartyData; }
    public java.lang.String getThirdPartyData() { return thirdPartyData_; }
    
    private void initFields() {
      type_ = com.notifier.protocol.Protocol.Notification.Type.RING;
    }
    public final boolean isInitialized() {
      if (!hasDeviceId) return false;
      if (!hasId) return false;
      if (!hasType) return false;
      return true;
    }
    
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasDeviceId()) {
        output.writeFixed64(1, getDeviceId());
      }
      if (hasId()) {
        output.writeFixed64(2, getId());
      }
      if (hasType()) {
        output.writeEnum(3, getType().getNumber());
      }
      if (hasDescription()) {
        output.writeString(4, getDescription());
      }
      if (hasTitle()) {
        output.writeString(5, getTitle());
      }
      if (hasIcon()) {
        output.writeBytes(6, getIcon());
      }
      if (hasBatteryLevel()) {
        output.writeInt32(7, getBatteryLevel());
      }
      if (hasPhoneNumber()) {
        output.writeString(8, getPhoneNumber());
      }
      if (hasThirdPartyData()) {
        output.writeString(9, getThirdPartyData());
      }
    }
    
    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasDeviceId()) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed64Size(1, getDeviceId());
      }
      if (hasId()) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed64Size(2, getId());
      }
      if (hasType()) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(3, getType().getNumber());
      }
      if (hasDescription()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(4, getDescription());
      }
      if (hasTitle()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(5, getTitle());
      }
      if (hasIcon()) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(6, getIcon());
      }
      if (hasBatteryLevel()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(7, getBatteryLevel());
      }
      if (hasPhoneNumber()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(8, getPhoneNumber());
      }
      if (hasThirdPartyData()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(9, getThirdPartyData());
      }
      memoizedSerializedSize = size;
      return size;
    }
    
    public static com.notifier.protocol.Protocol.Notification parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static com.notifier.protocol.Protocol.Notification parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static com.notifier.protocol.Protocol.Notification parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static com.notifier.protocol.Protocol.Notification parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static com.notifier.protocol.Protocol.Notification parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static com.notifier.protocol.Protocol.Notification parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static com.notifier.protocol.Protocol.Notification parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static com.notifier.protocol.Protocol.Notification parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static com.notifier.protocol.Protocol.Notification parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static com.notifier.protocol.Protocol.Notification parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.notifier.protocol.Protocol.Notification prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageLite.Builder<
          com.notifier.protocol.Protocol.Notification, Builder> {
      private com.notifier.protocol.Protocol.Notification result;
      
      // Construct using com.notifier.protocol.Protocol.Notification.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new com.notifier.protocol.Protocol.Notification();
        return builder;
      }
      
      protected com.notifier.protocol.Protocol.Notification internalGetResult() {
        return result;
      }
      
      public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new com.notifier.protocol.Protocol.Notification();
        return this;
      }
      
      public Builder clone() {
        return create().mergeFrom(result);
      }
      
      public com.notifier.protocol.Protocol.Notification getDefaultInstanceForType() {
        return com.notifier.protocol.Protocol.Notification.getDefaultInstance();
      }
      
      public boolean isInitialized() {
        return result.isInitialized();
      }
      public com.notifier.protocol.Protocol.Notification build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private com.notifier.protocol.Protocol.Notification buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      public com.notifier.protocol.Protocol.Notification buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        com.notifier.protocol.Protocol.Notification returnMe = result;
        result = null;
        return returnMe;
      }
      
      public Builder mergeFrom(com.notifier.protocol.Protocol.Notification other) {
        if (other == com.notifier.protocol.Protocol.Notification.getDefaultInstance()) return this;
        if (other.hasDeviceId()) {
          setDeviceId(other.getDeviceId());
        }
        if (other.hasId()) {
          setId(other.getId());
        }
        if (other.hasType()) {
          setType(other.getType());
        }
        if (other.hasDescription()) {
          setDescription(other.getDescription());
        }
        if (other.hasTitle()) {
          setTitle(other.getTitle());
        }
        if (other.hasIcon()) {
          setIcon(other.getIcon());
        }
        if (other.hasBatteryLevel()) {
          setBatteryLevel(other.getBatteryLevel());
        }
        if (other.hasPhoneNumber()) {
          setPhoneNumber(other.getPhoneNumber());
        }
        if (other.hasThirdPartyData()) {
          setThirdPartyData(other.getThirdPartyData());
        }
        return this;
      }
      
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              return this;
            default: {
              if (!parseUnknownField(input, extensionRegistry, tag)) {
                return this;
              }
              break;
            }
            case 9: {
              setDeviceId(input.readFixed64());
              break;
            }
            case 17: {
              setId(input.readFixed64());
              break;
            }
            case 24: {
              int rawValue = input.readEnum();
              com.notifier.protocol.Protocol.Notification.Type value = com.notifier.protocol.Protocol.Notification.Type.valueOf(rawValue);
              if (value != null) {
                setType(value);
              }
              break;
            }
            case 34: {
              setDescription(input.readString());
              break;
            }
            case 42: {
              setTitle(input.readString());
              break;
            }
            case 50: {
              setIcon(input.readBytes());
              break;
            }
            case 56: {
              setBatteryLevel(input.readInt32());
              break;
            }
            case 66: {
              setPhoneNumber(input.readString());
              break;
            }
            case 74: {
              setThirdPartyData(input.readString());
              break;
            }
          }
        }
      }
      
      
      // required fixed64 device_id = 1;
      public boolean hasDeviceId() {
        return result.hasDeviceId();
      }
      public long getDeviceId() {
        return result.getDeviceId();
      }
      public Builder setDeviceId(long value) {
        result.hasDeviceId = true;
        result.deviceId_ = value;
        return this;
      }
      public Builder clearDeviceId() {
        result.hasDeviceId = false;
        result.deviceId_ = 0L;
        return this;
      }
      
      // required fixed64 id = 2;
      public boolean hasId() {
        return result.hasId();
      }
      public long getId() {
        return result.getId();
      }
      public Builder setId(long value) {
        result.hasId = true;
        result.id_ = value;
        return this;
      }
      public Builder clearId() {
        result.hasId = false;
        result.id_ = 0L;
        return this;
      }
      
      // required .android_notifier.Notification.Type type = 3;
      public boolean hasType() {
        return result.hasType();
      }
      public com.notifier.protocol.Protocol.Notification.Type getType() {
        return result.getType();
      }
      public Builder setType(com.notifier.protocol.Protocol.Notification.Type value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.hasType = true;
        result.type_ = value;
        return this;
      }
      public Builder clearType() {
        result.hasType = false;
        result.type_ = com.notifier.protocol.Protocol.Notification.Type.RING;
        return this;
      }
      
      // optional string description = 4;
      public boolean hasDescription() {
        return result.hasDescription();
      }
      public java.lang.String getDescription() {
        return result.getDescription();
      }
      public Builder setDescription(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasDescription = true;
        result.description_ = value;
        return this;
      }
      public Builder clearDescription() {
        result.hasDescription = false;
        result.description_ = getDefaultInstance().getDescription();
        return this;
      }
      
      // optional string title = 5;
      public boolean hasTitle() {
        return result.hasTitle();
      }
      public java.lang.String getTitle() {
        return result.getTitle();
      }
      public Builder setTitle(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasTitle = true;
        result.title_ = value;
        return this;
      }
      public Builder clearTitle() {
        result.hasTitle = false;
        result.title_ = getDefaultInstance().getTitle();
        return this;
      }
      
      // optional bytes icon = 6;
      public boolean hasIcon() {
        return result.hasIcon();
      }
      public com.google.protobuf.ByteString getIcon() {
        return result.getIcon();
      }
      public Builder setIcon(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasIcon = true;
        result.icon_ = value;
        return this;
      }
      public Builder clearIcon() {
        result.hasIcon = false;
        result.icon_ = getDefaultInstance().getIcon();
        return this;
      }
      
      // optional int32 battery_level = 7;
      public boolean hasBatteryLevel() {
        return result.hasBatteryLevel();
      }
      public int getBatteryLevel() {
        return result.getBatteryLevel();
      }
      public Builder setBatteryLevel(int value) {
        result.hasBatteryLevel = true;
        result.batteryLevel_ = value;
        return this;
      }
      public Builder clearBatteryLevel() {
        result.hasBatteryLevel = false;
        result.batteryLevel_ = 0;
        return this;
      }
      
      // optional string phone_number = 8;
      public boolean hasPhoneNumber() {
        return result.hasPhoneNumber();
      }
      public java.lang.String getPhoneNumber() {
        return result.getPhoneNumber();
      }
      public Builder setPhoneNumber(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasPhoneNumber = true;
        result.phoneNumber_ = value;
        return this;
      }
      public Builder clearPhoneNumber() {
        result.hasPhoneNumber = false;
        result.phoneNumber_ = getDefaultInstance().getPhoneNumber();
        return this;
      }
      
      // optional string third_party_data = 9;
      public boolean hasThirdPartyData() {
        return result.hasThirdPartyData();
      }
      public java.lang.String getThirdPartyData() {
        return result.getThirdPartyData();
      }
      public Builder setThirdPartyData(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasThirdPartyData = true;
        result.thirdPartyData_ = value;
        return this;
      }
      public Builder clearThirdPartyData() {
        result.hasThirdPartyData = false;
        result.thirdPartyData_ = getDefaultInstance().getThirdPartyData();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:android_notifier.Notification)
    }
    
    static {
      defaultInstance = new Notification(true);
      com.notifier.protocol.Protocol.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:android_notifier.Notification)
  }
  
  public static final class Contact extends
      com.google.protobuf.GeneratedMessageLite {
    // Use Contact.newBuilder() to construct.
    private Contact() {
      initFields();
    }
    private Contact(boolean noInit) {}
    
    private static final Contact defaultInstance;
    public static Contact getDefaultInstance() {
      return defaultInstance;
    }
    
    public Contact getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public enum Type
        implements com.google.protobuf.Internal.EnumLite {
      HOME(0, 0),
      MOBILE(1, 1),
      WORK(2, 2),
      OTHER(3, 3),
      ;
      
      
      public final int getNumber() { return value; }
      
      public static Type valueOf(int value) {
        switch (value) {
          case 0: return HOME;
          case 1: return MOBILE;
          case 2: return WORK;
          case 3: return OTHER;
          default: return null;
        }
      }
      
      public static com.google.protobuf.Internal.EnumLiteMap<Type>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<Type>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<Type>() {
              public Type findValueByNumber(int number) {
                return Type.valueOf(number)
      ;        }
            };
      
      private final int index;
      private final int value;
      private Type(int index, int value) {
        this.index = index;
        this.value = value;
      }
      
      // @@protoc_insertion_point(enum_scope:android_notifier.Contact.Type)
    }
    
    // required string name = 1;
    public static final int NAME_FIELD_NUMBER = 1;
    private boolean hasName;
    private java.lang.String name_ = "";
    public boolean hasName() { return hasName; }
    public java.lang.String getName() { return name_; }
    
    // required string number = 2;
    public static final int NUMBER_FIELD_NUMBER = 2;
    private boolean hasNumber;
    private java.lang.String number_ = "";
    public boolean hasNumber() { return hasNumber; }
    public java.lang.String getNumber() { return number_; }
    
    // required .android_notifier.Contact.Type type = 3;
    public static final int TYPE_FIELD_NUMBER = 3;
    private boolean hasType;
    private com.notifier.protocol.Protocol.Contact.Type type_;
    public boolean hasType() { return hasType; }
    public com.notifier.protocol.Protocol.Contact.Type getType() { return type_; }
    
    // optional string other_type = 4;
    public static final int OTHER_TYPE_FIELD_NUMBER = 4;
    private boolean hasOtherType;
    private java.lang.String otherType_ = "";
    public boolean hasOtherType() { return hasOtherType; }
    public java.lang.String getOtherType() { return otherType_; }
    
    private void initFields() {
      type_ = com.notifier.protocol.Protocol.Contact.Type.HOME;
    }
    public final boolean isInitialized() {
      if (!hasName) return false;
      if (!hasNumber) return false;
      if (!hasType) return false;
      return true;
    }
    
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasName()) {
        output.writeString(1, getName());
      }
      if (hasNumber()) {
        output.writeString(2, getNumber());
      }
      if (hasType()) {
        output.writeEnum(3, getType().getNumber());
      }
      if (hasOtherType()) {
        output.writeString(4, getOtherType());
      }
    }
    
    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasName()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(1, getName());
      }
      if (hasNumber()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(2, getNumber());
      }
      if (hasType()) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(3, getType().getNumber());
      }
      if (hasOtherType()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(4, getOtherType());
      }
      memoizedSerializedSize = size;
      return size;
    }
    
    public static com.notifier.protocol.Protocol.Contact parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static com.notifier.protocol.Protocol.Contact parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static com.notifier.protocol.Protocol.Contact parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static com.notifier.protocol.Protocol.Contact parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static com.notifier.protocol.Protocol.Contact parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static com.notifier.protocol.Protocol.Contact parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static com.notifier.protocol.Protocol.Contact parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static com.notifier.protocol.Protocol.Contact parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static com.notifier.protocol.Protocol.Contact parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static com.notifier.protocol.Protocol.Contact parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.notifier.protocol.Protocol.Contact prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageLite.Builder<
          com.notifier.protocol.Protocol.Contact, Builder> {
      private com.notifier.protocol.Protocol.Contact result;
      
      // Construct using com.notifier.protocol.Protocol.Contact.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new com.notifier.protocol.Protocol.Contact();
        return builder;
      }
      
      protected com.notifier.protocol.Protocol.Contact internalGetResult() {
        return result;
      }
      
      public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new com.notifier.protocol.Protocol.Contact();
        return this;
      }
      
      public Builder clone() {
        return create().mergeFrom(result);
      }
      
      public com.notifier.protocol.Protocol.Contact getDefaultInstanceForType() {
        return com.notifier.protocol.Protocol.Contact.getDefaultInstance();
      }
      
      public boolean isInitialized() {
        return result.isInitialized();
      }
      public com.notifier.protocol.Protocol.Contact build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private com.notifier.protocol.Protocol.Contact buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      public com.notifier.protocol.Protocol.Contact buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        com.notifier.protocol.Protocol.Contact returnMe = result;
        result = null;
        return returnMe;
      }
      
      public Builder mergeFrom(com.notifier.protocol.Protocol.Contact other) {
        if (other == com.notifier.protocol.Protocol.Contact.getDefaultInstance()) return this;
        if (other.hasName()) {
          setName(other.getName());
        }
        if (other.hasNumber()) {
          setNumber(other.getNumber());
        }
        if (other.hasType()) {
          setType(other.getType());
        }
        if (other.hasOtherType()) {
          setOtherType(other.getOtherType());
        }
        return this;
      }
      
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              return this;
            default: {
              if (!parseUnknownField(input, extensionRegistry, tag)) {
                return this;
              }
              break;
            }
            case 10: {
              setName(input.readString());
              break;
            }
            case 18: {
              setNumber(input.readString());
              break;
            }
            case 24: {
              int rawValue = input.readEnum();
              com.notifier.protocol.Protocol.Contact.Type value = com.notifier.protocol.Protocol.Contact.Type.valueOf(rawValue);
              if (value != null) {
                setType(value);
              }
              break;
            }
            case 34: {
              setOtherType(input.readString());
              break;
            }
          }
        }
      }
      
      
      // required string name = 1;
      public boolean hasName() {
        return result.hasName();
      }
      public java.lang.String getName() {
        return result.getName();
      }
      public Builder setName(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasName = true;
        result.name_ = value;
        return this;
      }
      public Builder clearName() {
        result.hasName = false;
        result.name_ = getDefaultInstance().getName();
        return this;
      }
      
      // required string number = 2;
      public boolean hasNumber() {
        return result.hasNumber();
      }
      public java.lang.String getNumber() {
        return result.getNumber();
      }
      public Builder setNumber(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasNumber = true;
        result.number_ = value;
        return this;
      }
      public Builder clearNumber() {
        result.hasNumber = false;
        result.number_ = getDefaultInstance().getNumber();
        return this;
      }
      
      // required .android_notifier.Contact.Type type = 3;
      public boolean hasType() {
        return result.hasType();
      }
      public com.notifier.protocol.Protocol.Contact.Type getType() {
        return result.getType();
      }
      public Builder setType(com.notifier.protocol.Protocol.Contact.Type value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.hasType = true;
        result.type_ = value;
        return this;
      }
      public Builder clearType() {
        result.hasType = false;
        result.type_ = com.notifier.protocol.Protocol.Contact.Type.HOME;
        return this;
      }
      
      // optional string other_type = 4;
      public boolean hasOtherType() {
        return result.hasOtherType();
      }
      public java.lang.String getOtherType() {
        return result.getOtherType();
      }
      public Builder setOtherType(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasOtherType = true;
        result.otherType_ = value;
        return this;
      }
      public Builder clearOtherType() {
        result.hasOtherType = false;
        result.otherType_ = getDefaultInstance().getOtherType();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:android_notifier.Contact)
    }
    
    static {
      defaultInstance = new Contact(true);
      com.notifier.protocol.Protocol.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:android_notifier.Contact)
  }
  
  public static final class Discovery extends
      com.google.protobuf.GeneratedMessageLite {
    // Use Discovery.newBuilder() to construct.
    private Discovery() {
      initFields();
    }
    private Discovery(boolean noInit) {}
    
    private static final Discovery defaultInstance;
    public static Discovery getDefaultInstance() {
      return defaultInstance;
    }
    
    public Discovery getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    // required string desktop_id = 1;
    public static final int DESKTOP_ID_FIELD_NUMBER = 1;
    private boolean hasDesktopId;
    private java.lang.String desktopId_ = "";
    public boolean hasDesktopId() { return hasDesktopId; }
    public java.lang.String getDesktopId() { return desktopId_; }
    
    // required bytes ip_address = 2;
    public static final int IP_ADDRESS_FIELD_NUMBER = 2;
    private boolean hasIpAddress;
    private com.google.protobuf.ByteString ipAddress_ = com.google.protobuf.ByteString.EMPTY;
    public boolean hasIpAddress() { return hasIpAddress; }
    public com.google.protobuf.ByteString getIpAddress() { return ipAddress_; }
    
    // required int32 ip_port = 3;
    public static final int IP_PORT_FIELD_NUMBER = 3;
    private boolean hasIpPort;
    private int ipPort_ = 0;
    public boolean hasIpPort() { return hasIpPort; }
    public int getIpPort() { return ipPort_; }
    
    // optional string bluetooth_address = 4;
    public static final int BLUETOOTH_ADDRESS_FIELD_NUMBER = 4;
    private boolean hasBluetoothAddress;
    private java.lang.String bluetoothAddress_ = "";
    public boolean hasBluetoothAddress() { return hasBluetoothAddress; }
    public java.lang.String getBluetoothAddress() { return bluetoothAddress_; }
    
    // required bool only_paired = 5;
    public static final int ONLY_PAIRED_FIELD_NUMBER = 5;
    private boolean hasOnlyPaired;
    private boolean onlyPaired_ = false;
    public boolean hasOnlyPaired() { return hasOnlyPaired; }
    public boolean getOnlyPaired() { return onlyPaired_; }
    
    // repeated string paired_device_ids = 6;
    public static final int PAIRED_DEVICE_IDS_FIELD_NUMBER = 6;
    private java.util.List<java.lang.String> pairedDeviceIds_ =
      java.util.Collections.emptyList();
    public java.util.List<java.lang.String> getPairedDeviceIdsList() {
      return pairedDeviceIds_;
    }
    public int getPairedDeviceIdsCount() { return pairedDeviceIds_.size(); }
    public java.lang.String getPairedDeviceIds(int index) {
      return pairedDeviceIds_.get(index);
    }
    
    private void initFields() {
    }
    public final boolean isInitialized() {
      if (!hasDesktopId) return false;
      if (!hasIpAddress) return false;
      if (!hasIpPort) return false;
      if (!hasOnlyPaired) return false;
      return true;
    }
    
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasDesktopId()) {
        output.writeString(1, getDesktopId());
      }
      if (hasIpAddress()) {
        output.writeBytes(2, getIpAddress());
      }
      if (hasIpPort()) {
        output.writeInt32(3, getIpPort());
      }
      if (hasBluetoothAddress()) {
        output.writeString(4, getBluetoothAddress());
      }
      if (hasOnlyPaired()) {
        output.writeBool(5, getOnlyPaired());
      }
      for (java.lang.String element : getPairedDeviceIdsList()) {
        output.writeString(6, element);
      }
    }
    
    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasDesktopId()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(1, getDesktopId());
      }
      if (hasIpAddress()) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getIpAddress());
      }
      if (hasIpPort()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(3, getIpPort());
      }
      if (hasBluetoothAddress()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(4, getBluetoothAddress());
      }
      if (hasOnlyPaired()) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(5, getOnlyPaired());
      }
      {
        int dataSize = 0;
        for (java.lang.String element : getPairedDeviceIdsList()) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeStringSizeNoTag(element);
        }
        size += dataSize;
        size += 1 * getPairedDeviceIdsList().size();
      }
      memoizedSerializedSize = size;
      return size;
    }
    
    public static com.notifier.protocol.Protocol.Discovery parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static com.notifier.protocol.Protocol.Discovery parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static com.notifier.protocol.Protocol.Discovery parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static com.notifier.protocol.Protocol.Discovery parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static com.notifier.protocol.Protocol.Discovery parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static com.notifier.protocol.Protocol.Discovery parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static com.notifier.protocol.Protocol.Discovery parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static com.notifier.protocol.Protocol.Discovery parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static com.notifier.protocol.Protocol.Discovery parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static com.notifier.protocol.Protocol.Discovery parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.notifier.protocol.Protocol.Discovery prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageLite.Builder<
          com.notifier.protocol.Protocol.Discovery, Builder> {
      private com.notifier.protocol.Protocol.Discovery result;
      
      // Construct using com.notifier.protocol.Protocol.Discovery.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new com.notifier.protocol.Protocol.Discovery();
        return builder;
      }
      
      protected com.notifier.protocol.Protocol.Discovery internalGetResult() {
        return result;
      }
      
      public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new com.notifier.protocol.Protocol.Discovery();
        return this;
      }
      
      public Builder clone() {
        return create().mergeFrom(result);
      }
      
      public com.notifier.protocol.Protocol.Discovery getDefaultInstanceForType() {
        return com.notifier.protocol.Protocol.Discovery.getDefaultInstance();
      }
      
      public boolean isInitialized() {
        return result.isInitialized();
      }
      public com.notifier.protocol.Protocol.Discovery build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private com.notifier.protocol.Protocol.Discovery buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      public com.notifier.protocol.Protocol.Discovery buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.pairedDeviceIds_ != java.util.Collections.EMPTY_LIST) {
          result.pairedDeviceIds_ =
            java.util.Collections.unmodifiableList(result.pairedDeviceIds_);
        }
        com.notifier.protocol.Protocol.Discovery returnMe = result;
        result = null;
        return returnMe;
      }
      
      public Builder mergeFrom(com.notifier.protocol.Protocol.Discovery other) {
        if (other == com.notifier.protocol.Protocol.Discovery.getDefaultInstance()) return this;
        if (other.hasDesktopId()) {
          setDesktopId(other.getDesktopId());
        }
        if (other.hasIpAddress()) {
          setIpAddress(other.getIpAddress());
        }
        if (other.hasIpPort()) {
          setIpPort(other.getIpPort());
        }
        if (other.hasBluetoothAddress()) {
          setBluetoothAddress(other.getBluetoothAddress());
        }
        if (other.hasOnlyPaired()) {
          setOnlyPaired(other.getOnlyPaired());
        }
        if (!other.pairedDeviceIds_.isEmpty()) {
          if (result.pairedDeviceIds_.isEmpty()) {
            result.pairedDeviceIds_ = new java.util.ArrayList<java.lang.String>();
          }
          result.pairedDeviceIds_.addAll(other.pairedDeviceIds_);
        }
        return this;
      }
      
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              return this;
            default: {
              if (!parseUnknownField(input, extensionRegistry, tag)) {
                return this;
              }
              break;
            }
            case 10: {
              setDesktopId(input.readString());
              break;
            }
            case 18: {
              setIpAddress(input.readBytes());
              break;
            }
            case 24: {
              setIpPort(input.readInt32());
              break;
            }
            case 34: {
              setBluetoothAddress(input.readString());
              break;
            }
            case 40: {
              setOnlyPaired(input.readBool());
              break;
            }
            case 50: {
              addPairedDeviceIds(input.readString());
              break;
            }
          }
        }
      }
      
      
      // required string desktop_id = 1;
      public boolean hasDesktopId() {
        return result.hasDesktopId();
      }
      public java.lang.String getDesktopId() {
        return result.getDesktopId();
      }
      public Builder setDesktopId(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasDesktopId = true;
        result.desktopId_ = value;
        return this;
      }
      public Builder clearDesktopId() {
        result.hasDesktopId = false;
        result.desktopId_ = getDefaultInstance().getDesktopId();
        return this;
      }
      
      // required bytes ip_address = 2;
      public boolean hasIpAddress() {
        return result.hasIpAddress();
      }
      public com.google.protobuf.ByteString getIpAddress() {
        return result.getIpAddress();
      }
      public Builder setIpAddress(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasIpAddress = true;
        result.ipAddress_ = value;
        return this;
      }
      public Builder clearIpAddress() {
        result.hasIpAddress = false;
        result.ipAddress_ = getDefaultInstance().getIpAddress();
        return this;
      }
      
      // required int32 ip_port = 3;
      public boolean hasIpPort() {
        return result.hasIpPort();
      }
      public int getIpPort() {
        return result.getIpPort();
      }
      public Builder setIpPort(int value) {
        result.hasIpPort = true;
        result.ipPort_ = value;
        return this;
      }
      public Builder clearIpPort() {
        result.hasIpPort = false;
        result.ipPort_ = 0;
        return this;
      }
      
      // optional string bluetooth_address = 4;
      public boolean hasBluetoothAddress() {
        return result.hasBluetoothAddress();
      }
      public java.lang.String getBluetoothAddress() {
        return result.getBluetoothAddress();
      }
      public Builder setBluetoothAddress(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasBluetoothAddress = true;
        result.bluetoothAddress_ = value;
        return this;
      }
      public Builder clearBluetoothAddress() {
        result.hasBluetoothAddress = false;
        result.bluetoothAddress_ = getDefaultInstance().getBluetoothAddress();
        return this;
      }
      
      // required bool only_paired = 5;
      public boolean hasOnlyPaired() {
        return result.hasOnlyPaired();
      }
      public boolean getOnlyPaired() {
        return result.getOnlyPaired();
      }
      public Builder setOnlyPaired(boolean value) {
        result.hasOnlyPaired = true;
        result.onlyPaired_ = value;
        return this;
      }
      public Builder clearOnlyPaired() {
        result.hasOnlyPaired = false;
        result.onlyPaired_ = false;
        return this;
      }
      
      // repeated string paired_device_ids = 6;
      public java.util.List<java.lang.String> getPairedDeviceIdsList() {
        return java.util.Collections.unmodifiableList(result.pairedDeviceIds_);
      }
      public int getPairedDeviceIdsCount() {
        return result.getPairedDeviceIdsCount();
      }
      public java.lang.String getPairedDeviceIds(int index) {
        return result.getPairedDeviceIds(index);
      }
      public Builder setPairedDeviceIds(int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.pairedDeviceIds_.set(index, value);
        return this;
      }
      public Builder addPairedDeviceIds(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  if (result.pairedDeviceIds_.isEmpty()) {
          result.pairedDeviceIds_ = new java.util.ArrayList<java.lang.String>();
        }
        result.pairedDeviceIds_.add(value);
        return this;
      }
      public Builder addAllPairedDeviceIds(
          java.lang.Iterable<? extends java.lang.String> values) {
        if (result.pairedDeviceIds_.isEmpty()) {
          result.pairedDeviceIds_ = new java.util.ArrayList<java.lang.String>();
        }
        super.addAll(values, result.pairedDeviceIds_);
        return this;
      }
      public Builder clearPairedDeviceIds() {
        result.pairedDeviceIds_ = java.util.Collections.emptyList();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:android_notifier.Discovery)
    }
    
    static {
      defaultInstance = new Discovery(true);
      com.notifier.protocol.Protocol.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:android_notifier.Discovery)
  }
  
  public static final class CommandRequest extends
      com.google.protobuf.GeneratedMessageLite {
    // Use CommandRequest.newBuilder() to construct.
    private CommandRequest() {
      initFields();
    }
    private CommandRequest(boolean noInit) {}
    
    private static final CommandRequest defaultInstance;
    public static CommandRequest getDefaultInstance() {
      return defaultInstance;
    }
    
    public CommandRequest getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public enum CommandType
        implements com.google.protobuf.Internal.EnumLite {
      CALL(0, 1),
      ANSWER(1, 2),
      HANG_UP(2, 3),
      SEND_SMS(3, 4),
      SEND_MMS(4, 5),
      QUERY(5, 6),
      DISCOVER(6, 7),
      ;
      
      
      public final int getNumber() { return value; }
      
      public static CommandType valueOf(int value) {
        switch (value) {
          case 1: return CALL;
          case 2: return ANSWER;
          case 3: return HANG_UP;
          case 4: return SEND_SMS;
          case 5: return SEND_MMS;
          case 6: return QUERY;
          case 7: return DISCOVER;
          default: return null;
        }
      }
      
      public static com.google.protobuf.Internal.EnumLiteMap<CommandType>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<CommandType>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<CommandType>() {
              public CommandType findValueByNumber(int number) {
                return CommandType.valueOf(number)
      ;        }
            };
      
      private final int index;
      private final int value;
      private CommandType(int index, int value) {
        this.index = index;
        this.value = value;
      }
      
      // @@protoc_insertion_point(enum_scope:android_notifier.CommandRequest.CommandType)
    }
    
    public static final class CallOptions extends
        com.google.protobuf.GeneratedMessageLite {
      // Use CallOptions.newBuilder() to construct.
      private CallOptions() {
        initFields();
      }
      private CallOptions(boolean noInit) {}
      
      private static final CallOptions defaultInstance;
      public static CallOptions getDefaultInstance() {
        return defaultInstance;
      }
      
      public CallOptions getDefaultInstanceForType() {
        return defaultInstance;
      }
      
      // required string phone_number = 1;
      public static final int PHONE_NUMBER_FIELD_NUMBER = 1;
      private boolean hasPhoneNumber;
      private java.lang.String phoneNumber_ = "";
      public boolean hasPhoneNumber() { return hasPhoneNumber; }
      public java.lang.String getPhoneNumber() { return phoneNumber_; }
      
      private void initFields() {
      }
      public final boolean isInitialized() {
        if (!hasPhoneNumber) return false;
        return true;
      }
      
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (hasPhoneNumber()) {
          output.writeString(1, getPhoneNumber());
        }
      }
      
      private int memoizedSerializedSize = -1;
      public int getSerializedSize() {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
      
        size = 0;
        if (hasPhoneNumber()) {
          size += com.google.protobuf.CodedOutputStream
            .computeStringSize(1, getPhoneNumber());
        }
        memoizedSerializedSize = size;
        return size;
      }
      
      public static com.notifier.protocol.Protocol.CommandRequest.CallOptions parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static com.notifier.protocol.Protocol.CommandRequest.CallOptions parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static com.notifier.protocol.Protocol.CommandRequest.CallOptions parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static com.notifier.protocol.Protocol.CommandRequest.CallOptions parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static com.notifier.protocol.Protocol.CommandRequest.CallOptions parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static com.notifier.protocol.Protocol.CommandRequest.CallOptions parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      public static com.notifier.protocol.Protocol.CommandRequest.CallOptions parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static com.notifier.protocol.Protocol.CommandRequest.CallOptions parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static com.notifier.protocol.Protocol.CommandRequest.CallOptions parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static com.notifier.protocol.Protocol.CommandRequest.CallOptions parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      
      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(com.notifier.protocol.Protocol.CommandRequest.CallOptions prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() { return newBuilder(this); }
      
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageLite.Builder<
            com.notifier.protocol.Protocol.CommandRequest.CallOptions, Builder> {
        private com.notifier.protocol.Protocol.CommandRequest.CallOptions result;
        
        // Construct using com.notifier.protocol.Protocol.CommandRequest.CallOptions.newBuilder()
        private Builder() {}
        
        private static Builder create() {
          Builder builder = new Builder();
          builder.result = new com.notifier.protocol.Protocol.CommandRequest.CallOptions();
          return builder;
        }
        
        protected com.notifier.protocol.Protocol.CommandRequest.CallOptions internalGetResult() {
          return result;
        }
        
        public Builder clear() {
          if (result == null) {
            throw new IllegalStateException(
              "Cannot call clear() after build().");
          }
          result = new com.notifier.protocol.Protocol.CommandRequest.CallOptions();
          return this;
        }
        
        public Builder clone() {
          return create().mergeFrom(result);
        }
        
        public com.notifier.protocol.Protocol.CommandRequest.CallOptions getDefaultInstanceForType() {
          return com.notifier.protocol.Protocol.CommandRequest.CallOptions.getDefaultInstance();
        }
        
        public boolean isInitialized() {
          return result.isInitialized();
        }
        public com.notifier.protocol.Protocol.CommandRequest.CallOptions build() {
          if (result != null && !isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return buildPartial();
        }
        
        private com.notifier.protocol.Protocol.CommandRequest.CallOptions buildParsed()
            throws com.google.protobuf.InvalidProtocolBufferException {
          if (!isInitialized()) {
            throw newUninitializedMessageException(
              result).asInvalidProtocolBufferException();
          }
          return buildPartial();
        }
        
        public com.notifier.protocol.Protocol.CommandRequest.CallOptions buildPartial() {
          if (result == null) {
            throw new IllegalStateException(
              "build() has already been called on this Builder.");
          }
          com.notifier.protocol.Protocol.CommandRequest.CallOptions returnMe = result;
          result = null;
          return returnMe;
        }
        
        public Builder mergeFrom(com.notifier.protocol.Protocol.CommandRequest.CallOptions other) {
          if (other == com.notifier.protocol.Protocol.CommandRequest.CallOptions.getDefaultInstance()) return this;
          if (other.hasPhoneNumber()) {
            setPhoneNumber(other.getPhoneNumber());
          }
          return this;
        }
        
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          while (true) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                return this;
              default: {
                if (!parseUnknownField(input, extensionRegistry, tag)) {
                  return this;
                }
                break;
              }
              case 10: {
                setPhoneNumber(input.readString());
                break;
              }
            }
          }
        }
        
        
        // required string phone_number = 1;
        public boolean hasPhoneNumber() {
          return result.hasPhoneNumber();
        }
        public java.lang.String getPhoneNumber() {
          return result.getPhoneNumber();
        }
        public Builder setPhoneNumber(java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  result.hasPhoneNumber = true;
          result.phoneNumber_ = value;
          return this;
        }
        public Builder clearPhoneNumber() {
          result.hasPhoneNumber = false;
          result.phoneNumber_ = getDefaultInstance().getPhoneNumber();
          return this;
        }
        
        // @@protoc_insertion_point(builder_scope:android_notifier.CommandRequest.CallOptions)
      }
      
      static {
        defaultInstance = new CallOptions(true);
        com.notifier.protocol.Protocol.internalForceInit();
        defaultInstance.initFields();
      }
      
      // @@protoc_insertion_point(class_scope:android_notifier.CommandRequest.CallOptions)
    }
    
    public static final class SmsOptions extends
        com.google.protobuf.GeneratedMessageLite {
      // Use SmsOptions.newBuilder() to construct.
      private SmsOptions() {
        initFields();
      }
      private SmsOptions(boolean noInit) {}
      
      private static final SmsOptions defaultInstance;
      public static SmsOptions getDefaultInstance() {
        return defaultInstance;
      }
      
      public SmsOptions getDefaultInstanceForType() {
        return defaultInstance;
      }
      
      // required string phone_number = 1;
      public static final int PHONE_NUMBER_FIELD_NUMBER = 1;
      private boolean hasPhoneNumber;
      private java.lang.String phoneNumber_ = "";
      public boolean hasPhoneNumber() { return hasPhoneNumber; }
      public java.lang.String getPhoneNumber() { return phoneNumber_; }
      
      // required string sms_message = 2;
      public static final int SMS_MESSAGE_FIELD_NUMBER = 2;
      private boolean hasSmsMessage;
      private java.lang.String smsMessage_ = "";
      public boolean hasSmsMessage() { return hasSmsMessage; }
      public java.lang.String getSmsMessage() { return smsMessage_; }
      
      private void initFields() {
      }
      public final boolean isInitialized() {
        if (!hasPhoneNumber) return false;
        if (!hasSmsMessage) return false;
        return true;
      }
      
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (hasPhoneNumber()) {
          output.writeString(1, getPhoneNumber());
        }
        if (hasSmsMessage()) {
          output.writeString(2, getSmsMessage());
        }
      }
      
      private int memoizedSerializedSize = -1;
      public int getSerializedSize() {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
      
        size = 0;
        if (hasPhoneNumber()) {
          size += com.google.protobuf.CodedOutputStream
            .computeStringSize(1, getPhoneNumber());
        }
        if (hasSmsMessage()) {
          size += com.google.protobuf.CodedOutputStream
            .computeStringSize(2, getSmsMessage());
        }
        memoizedSerializedSize = size;
        return size;
      }
      
      public static com.notifier.protocol.Protocol.CommandRequest.SmsOptions parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static com.notifier.protocol.Protocol.CommandRequest.SmsOptions parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static com.notifier.protocol.Protocol.CommandRequest.SmsOptions parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static com.notifier.protocol.Protocol.CommandRequest.SmsOptions parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static com.notifier.protocol.Protocol.CommandRequest.SmsOptions parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static com.notifier.protocol.Protocol.CommandRequest.SmsOptions parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      public static com.notifier.protocol.Protocol.CommandRequest.SmsOptions parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static com.notifier.protocol.Protocol.CommandRequest.SmsOptions parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static com.notifier.protocol.Protocol.CommandRequest.SmsOptions parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static com.notifier.protocol.Protocol.CommandRequest.SmsOptions parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      
      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(com.notifier.protocol.Protocol.CommandRequest.SmsOptions prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() { return newBuilder(this); }
      
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageLite.Builder<
            com.notifier.protocol.Protocol.CommandRequest.SmsOptions, Builder> {
        private com.notifier.protocol.Protocol.CommandRequest.SmsOptions result;
        
        // Construct using com.notifier.protocol.Protocol.CommandRequest.SmsOptions.newBuilder()
        private Builder() {}
        
        private static Builder create() {
          Builder builder = new Builder();
          builder.result = new com.notifier.protocol.Protocol.CommandRequest.SmsOptions();
          return builder;
        }
        
        protected com.notifier.protocol.Protocol.CommandRequest.SmsOptions internalGetResult() {
          return result;
        }
        
        public Builder clear() {
          if (result == null) {
            throw new IllegalStateException(
              "Cannot call clear() after build().");
          }
          result = new com.notifier.protocol.Protocol.CommandRequest.SmsOptions();
          return this;
        }
        
        public Builder clone() {
          return create().mergeFrom(result);
        }
        
        public com.notifier.protocol.Protocol.CommandRequest.SmsOptions getDefaultInstanceForType() {
          return com.notifier.protocol.Protocol.CommandRequest.SmsOptions.getDefaultInstance();
        }
        
        public boolean isInitialized() {
          return result.isInitialized();
        }
        public com.notifier.protocol.Protocol.CommandRequest.SmsOptions build() {
          if (result != null && !isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return buildPartial();
        }
        
        private com.notifier.protocol.Protocol.CommandRequest.SmsOptions buildParsed()
            throws com.google.protobuf.InvalidProtocolBufferException {
          if (!isInitialized()) {
            throw newUninitializedMessageException(
              result).asInvalidProtocolBufferException();
          }
          return buildPartial();
        }
        
        public com.notifier.protocol.Protocol.CommandRequest.SmsOptions buildPartial() {
          if (result == null) {
            throw new IllegalStateException(
              "build() has already been called on this Builder.");
          }
          com.notifier.protocol.Protocol.CommandRequest.SmsOptions returnMe = result;
          result = null;
          return returnMe;
        }
        
        public Builder mergeFrom(com.notifier.protocol.Protocol.CommandRequest.SmsOptions other) {
          if (other == com.notifier.protocol.Protocol.CommandRequest.SmsOptions.getDefaultInstance()) return this;
          if (other.hasPhoneNumber()) {
            setPhoneNumber(other.getPhoneNumber());
          }
          if (other.hasSmsMessage()) {
            setSmsMessage(other.getSmsMessage());
          }
          return this;
        }
        
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          while (true) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                return this;
              default: {
                if (!parseUnknownField(input, extensionRegistry, tag)) {
                  return this;
                }
                break;
              }
              case 10: {
                setPhoneNumber(input.readString());
                break;
              }
              case 18: {
                setSmsMessage(input.readString());
                break;
              }
            }
          }
        }
        
        
        // required string phone_number = 1;
        public boolean hasPhoneNumber() {
          return result.hasPhoneNumber();
        }
        public java.lang.String getPhoneNumber() {
          return result.getPhoneNumber();
        }
        public Builder setPhoneNumber(java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  result.hasPhoneNumber = true;
          result.phoneNumber_ = value;
          return this;
        }
        public Builder clearPhoneNumber() {
          result.hasPhoneNumber = false;
          result.phoneNumber_ = getDefaultInstance().getPhoneNumber();
          return this;
        }
        
        // required string sms_message = 2;
        public boolean hasSmsMessage() {
          return result.hasSmsMessage();
        }
        public java.lang.String getSmsMessage() {
          return result.getSmsMessage();
        }
        public Builder setSmsMessage(java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  result.hasSmsMessage = true;
          result.smsMessage_ = value;
          return this;
        }
        public Builder clearSmsMessage() {
          result.hasSmsMessage = false;
          result.smsMessage_ = getDefaultInstance().getSmsMessage();
          return this;
        }
        
        // @@protoc_insertion_point(builder_scope:android_notifier.CommandRequest.SmsOptions)
      }
      
      static {
        defaultInstance = new SmsOptions(true);
        com.notifier.protocol.Protocol.internalForceInit();
        defaultInstance.initFields();
      }
      
      // @@protoc_insertion_point(class_scope:android_notifier.CommandRequest.SmsOptions)
    }
    
    public static final class QueryOptions extends
        com.google.protobuf.GeneratedMessageLite {
      // Use QueryOptions.newBuilder() to construct.
      private QueryOptions() {
        initFields();
      }
      private QueryOptions(boolean noInit) {}
      
      private static final QueryOptions defaultInstance;
      public static QueryOptions getDefaultInstance() {
        return defaultInstance;
      }
      
      public QueryOptions getDefaultInstanceForType() {
        return defaultInstance;
      }
      
      // required string query = 1;
      public static final int QUERY_FIELD_NUMBER = 1;
      private boolean hasQuery;
      private java.lang.String query_ = "";
      public boolean hasQuery() { return hasQuery; }
      public java.lang.String getQuery() { return query_; }
      
      private void initFields() {
      }
      public final boolean isInitialized() {
        if (!hasQuery) return false;
        return true;
      }
      
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (hasQuery()) {
          output.writeString(1, getQuery());
        }
      }
      
      private int memoizedSerializedSize = -1;
      public int getSerializedSize() {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
      
        size = 0;
        if (hasQuery()) {
          size += com.google.protobuf.CodedOutputStream
            .computeStringSize(1, getQuery());
        }
        memoizedSerializedSize = size;
        return size;
      }
      
      public static com.notifier.protocol.Protocol.CommandRequest.QueryOptions parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static com.notifier.protocol.Protocol.CommandRequest.QueryOptions parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static com.notifier.protocol.Protocol.CommandRequest.QueryOptions parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static com.notifier.protocol.Protocol.CommandRequest.QueryOptions parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static com.notifier.protocol.Protocol.CommandRequest.QueryOptions parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static com.notifier.protocol.Protocol.CommandRequest.QueryOptions parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      public static com.notifier.protocol.Protocol.CommandRequest.QueryOptions parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static com.notifier.protocol.Protocol.CommandRequest.QueryOptions parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static com.notifier.protocol.Protocol.CommandRequest.QueryOptions parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static com.notifier.protocol.Protocol.CommandRequest.QueryOptions parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      
      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(com.notifier.protocol.Protocol.CommandRequest.QueryOptions prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() { return newBuilder(this); }
      
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageLite.Builder<
            com.notifier.protocol.Protocol.CommandRequest.QueryOptions, Builder> {
        private com.notifier.protocol.Protocol.CommandRequest.QueryOptions result;
        
        // Construct using com.notifier.protocol.Protocol.CommandRequest.QueryOptions.newBuilder()
        private Builder() {}
        
        private static Builder create() {
          Builder builder = new Builder();
          builder.result = new com.notifier.protocol.Protocol.CommandRequest.QueryOptions();
          return builder;
        }
        
        protected com.notifier.protocol.Protocol.CommandRequest.QueryOptions internalGetResult() {
          return result;
        }
        
        public Builder clear() {
          if (result == null) {
            throw new IllegalStateException(
              "Cannot call clear() after build().");
          }
          result = new com.notifier.protocol.Protocol.CommandRequest.QueryOptions();
          return this;
        }
        
        public Builder clone() {
          return create().mergeFrom(result);
        }
        
        public com.notifier.protocol.Protocol.CommandRequest.QueryOptions getDefaultInstanceForType() {
          return com.notifier.protocol.Protocol.CommandRequest.QueryOptions.getDefaultInstance();
        }
        
        public boolean isInitialized() {
          return result.isInitialized();
        }
        public com.notifier.protocol.Protocol.CommandRequest.QueryOptions build() {
          if (result != null && !isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return buildPartial();
        }
        
        private com.notifier.protocol.Protocol.CommandRequest.QueryOptions buildParsed()
            throws com.google.protobuf.InvalidProtocolBufferException {
          if (!isInitialized()) {
            throw newUninitializedMessageException(
              result).asInvalidProtocolBufferException();
          }
          return buildPartial();
        }
        
        public com.notifier.protocol.Protocol.CommandRequest.QueryOptions buildPartial() {
          if (result == null) {
            throw new IllegalStateException(
              "build() has already been called on this Builder.");
          }
          com.notifier.protocol.Protocol.CommandRequest.QueryOptions returnMe = result;
          result = null;
          return returnMe;
        }
        
        public Builder mergeFrom(com.notifier.protocol.Protocol.CommandRequest.QueryOptions other) {
          if (other == com.notifier.protocol.Protocol.CommandRequest.QueryOptions.getDefaultInstance()) return this;
          if (other.hasQuery()) {
            setQuery(other.getQuery());
          }
          return this;
        }
        
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          while (true) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                return this;
              default: {
                if (!parseUnknownField(input, extensionRegistry, tag)) {
                  return this;
                }
                break;
              }
              case 10: {
                setQuery(input.readString());
                break;
              }
            }
          }
        }
        
        
        // required string query = 1;
        public boolean hasQuery() {
          return result.hasQuery();
        }
        public java.lang.String getQuery() {
          return result.getQuery();
        }
        public Builder setQuery(java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  result.hasQuery = true;
          result.query_ = value;
          return this;
        }
        public Builder clearQuery() {
          result.hasQuery = false;
          result.query_ = getDefaultInstance().getQuery();
          return this;
        }
        
        // @@protoc_insertion_point(builder_scope:android_notifier.CommandRequest.QueryOptions)
      }
      
      static {
        defaultInstance = new QueryOptions(true);
        com.notifier.protocol.Protocol.internalForceInit();
        defaultInstance.initFields();
      }
      
      // @@protoc_insertion_point(class_scope:android_notifier.CommandRequest.QueryOptions)
    }
    
    // required fixed64 device_id = 1;
    public static final int DEVICE_ID_FIELD_NUMBER = 1;
    private boolean hasDeviceId;
    private long deviceId_ = 0L;
    public boolean hasDeviceId() { return hasDeviceId; }
    public long getDeviceId() { return deviceId_; }
    
    // required fixed64 command_id = 2;
    public static final int COMMAND_ID_FIELD_NUMBER = 2;
    private boolean hasCommandId;
    private long commandId_ = 0L;
    public boolean hasCommandId() { return hasCommandId; }
    public long getCommandId() { return commandId_; }
    
    // required .android_notifier.CommandRequest.CommandType command_type = 3;
    public static final int COMMAND_TYPE_FIELD_NUMBER = 3;
    private boolean hasCommandType;
    private com.notifier.protocol.Protocol.CommandRequest.CommandType commandType_;
    public boolean hasCommandType() { return hasCommandType; }
    public com.notifier.protocol.Protocol.CommandRequest.CommandType getCommandType() { return commandType_; }
    
    // optional .android_notifier.CommandRequest.CallOptions call_options = 10;
    public static final int CALL_OPTIONS_FIELD_NUMBER = 10;
    private boolean hasCallOptions;
    private com.notifier.protocol.Protocol.CommandRequest.CallOptions callOptions_;
    public boolean hasCallOptions() { return hasCallOptions; }
    public com.notifier.protocol.Protocol.CommandRequest.CallOptions getCallOptions() { return callOptions_; }
    
    // optional .android_notifier.CommandRequest.SmsOptions sms_options = 11;
    public static final int SMS_OPTIONS_FIELD_NUMBER = 11;
    private boolean hasSmsOptions;
    private com.notifier.protocol.Protocol.CommandRequest.SmsOptions smsOptions_;
    public boolean hasSmsOptions() { return hasSmsOptions; }
    public com.notifier.protocol.Protocol.CommandRequest.SmsOptions getSmsOptions() { return smsOptions_; }
    
    // optional .android_notifier.CommandRequest.QueryOptions query_options = 12;
    public static final int QUERY_OPTIONS_FIELD_NUMBER = 12;
    private boolean hasQueryOptions;
    private com.notifier.protocol.Protocol.CommandRequest.QueryOptions queryOptions_;
    public boolean hasQueryOptions() { return hasQueryOptions; }
    public com.notifier.protocol.Protocol.CommandRequest.QueryOptions getQueryOptions() { return queryOptions_; }
    
    private void initFields() {
      commandType_ = com.notifier.protocol.Protocol.CommandRequest.CommandType.CALL;
      callOptions_ = com.notifier.protocol.Protocol.CommandRequest.CallOptions.getDefaultInstance();
      smsOptions_ = com.notifier.protocol.Protocol.CommandRequest.SmsOptions.getDefaultInstance();
      queryOptions_ = com.notifier.protocol.Protocol.CommandRequest.QueryOptions.getDefaultInstance();
    }
    public final boolean isInitialized() {
      if (!hasDeviceId) return false;
      if (!hasCommandId) return false;
      if (!hasCommandType) return false;
      if (hasCallOptions()) {
        if (!getCallOptions().isInitialized()) return false;
      }
      if (hasSmsOptions()) {
        if (!getSmsOptions().isInitialized()) return false;
      }
      if (hasQueryOptions()) {
        if (!getQueryOptions().isInitialized()) return false;
      }
      return true;
    }
    
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasDeviceId()) {
        output.writeFixed64(1, getDeviceId());
      }
      if (hasCommandId()) {
        output.writeFixed64(2, getCommandId());
      }
      if (hasCommandType()) {
        output.writeEnum(3, getCommandType().getNumber());
      }
      if (hasCallOptions()) {
        output.writeMessage(10, getCallOptions());
      }
      if (hasSmsOptions()) {
        output.writeMessage(11, getSmsOptions());
      }
      if (hasQueryOptions()) {
        output.writeMessage(12, getQueryOptions());
      }
    }
    
    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasDeviceId()) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed64Size(1, getDeviceId());
      }
      if (hasCommandId()) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed64Size(2, getCommandId());
      }
      if (hasCommandType()) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(3, getCommandType().getNumber());
      }
      if (hasCallOptions()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(10, getCallOptions());
      }
      if (hasSmsOptions()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(11, getSmsOptions());
      }
      if (hasQueryOptions()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12, getQueryOptions());
      }
      memoizedSerializedSize = size;
      return size;
    }
    
    public static com.notifier.protocol.Protocol.CommandRequest parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static com.notifier.protocol.Protocol.CommandRequest parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static com.notifier.protocol.Protocol.CommandRequest parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static com.notifier.protocol.Protocol.CommandRequest parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static com.notifier.protocol.Protocol.CommandRequest parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static com.notifier.protocol.Protocol.CommandRequest parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static com.notifier.protocol.Protocol.CommandRequest parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static com.notifier.protocol.Protocol.CommandRequest parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static com.notifier.protocol.Protocol.CommandRequest parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static com.notifier.protocol.Protocol.CommandRequest parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.notifier.protocol.Protocol.CommandRequest prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageLite.Builder<
          com.notifier.protocol.Protocol.CommandRequest, Builder> {
      private com.notifier.protocol.Protocol.CommandRequest result;
      
      // Construct using com.notifier.protocol.Protocol.CommandRequest.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new com.notifier.protocol.Protocol.CommandRequest();
        return builder;
      }
      
      protected com.notifier.protocol.Protocol.CommandRequest internalGetResult() {
        return result;
      }
      
      public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new com.notifier.protocol.Protocol.CommandRequest();
        return this;
      }
      
      public Builder clone() {
        return create().mergeFrom(result);
      }
      
      public com.notifier.protocol.Protocol.CommandRequest getDefaultInstanceForType() {
        return com.notifier.protocol.Protocol.CommandRequest.getDefaultInstance();
      }
      
      public boolean isInitialized() {
        return result.isInitialized();
      }
      public com.notifier.protocol.Protocol.CommandRequest build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private com.notifier.protocol.Protocol.CommandRequest buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      public com.notifier.protocol.Protocol.CommandRequest buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        com.notifier.protocol.Protocol.CommandRequest returnMe = result;
        result = null;
        return returnMe;
      }
      
      public Builder mergeFrom(com.notifier.protocol.Protocol.CommandRequest other) {
        if (other == com.notifier.protocol.Protocol.CommandRequest.getDefaultInstance()) return this;
        if (other.hasDeviceId()) {
          setDeviceId(other.getDeviceId());
        }
        if (other.hasCommandId()) {
          setCommandId(other.getCommandId());
        }
        if (other.hasCommandType()) {
          setCommandType(other.getCommandType());
        }
        if (other.hasCallOptions()) {
          mergeCallOptions(other.getCallOptions());
        }
        if (other.hasSmsOptions()) {
          mergeSmsOptions(other.getSmsOptions());
        }
        if (other.hasQueryOptions()) {
          mergeQueryOptions(other.getQueryOptions());
        }
        return this;
      }
      
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              return this;
            default: {
              if (!parseUnknownField(input, extensionRegistry, tag)) {
                return this;
              }
              break;
            }
            case 9: {
              setDeviceId(input.readFixed64());
              break;
            }
            case 17: {
              setCommandId(input.readFixed64());
              break;
            }
            case 24: {
              int rawValue = input.readEnum();
              com.notifier.protocol.Protocol.CommandRequest.CommandType value = com.notifier.protocol.Protocol.CommandRequest.CommandType.valueOf(rawValue);
              if (value != null) {
                setCommandType(value);
              }
              break;
            }
            case 82: {
              com.notifier.protocol.Protocol.CommandRequest.CallOptions.Builder subBuilder = com.notifier.protocol.Protocol.CommandRequest.CallOptions.newBuilder();
              if (hasCallOptions()) {
                subBuilder.mergeFrom(getCallOptions());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setCallOptions(subBuilder.buildPartial());
              break;
            }
            case 90: {
              com.notifier.protocol.Protocol.CommandRequest.SmsOptions.Builder subBuilder = com.notifier.protocol.Protocol.CommandRequest.SmsOptions.newBuilder();
              if (hasSmsOptions()) {
                subBuilder.mergeFrom(getSmsOptions());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setSmsOptions(subBuilder.buildPartial());
              break;
            }
            case 98: {
              com.notifier.protocol.Protocol.CommandRequest.QueryOptions.Builder subBuilder = com.notifier.protocol.Protocol.CommandRequest.QueryOptions.newBuilder();
              if (hasQueryOptions()) {
                subBuilder.mergeFrom(getQueryOptions());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setQueryOptions(subBuilder.buildPartial());
              break;
            }
          }
        }
      }
      
      
      // required fixed64 device_id = 1;
      public boolean hasDeviceId() {
        return result.hasDeviceId();
      }
      public long getDeviceId() {
        return result.getDeviceId();
      }
      public Builder setDeviceId(long value) {
        result.hasDeviceId = true;
        result.deviceId_ = value;
        return this;
      }
      public Builder clearDeviceId() {
        result.hasDeviceId = false;
        result.deviceId_ = 0L;
        return this;
      }
      
      // required fixed64 command_id = 2;
      public boolean hasCommandId() {
        return result.hasCommandId();
      }
      public long getCommandId() {
        return result.getCommandId();
      }
      public Builder setCommandId(long value) {
        result.hasCommandId = true;
        result.commandId_ = value;
        return this;
      }
      public Builder clearCommandId() {
        result.hasCommandId = false;
        result.commandId_ = 0L;
        return this;
      }
      
      // required .android_notifier.CommandRequest.CommandType command_type = 3;
      public boolean hasCommandType() {
        return result.hasCommandType();
      }
      public com.notifier.protocol.Protocol.CommandRequest.CommandType getCommandType() {
        return result.getCommandType();
      }
      public Builder setCommandType(com.notifier.protocol.Protocol.CommandRequest.CommandType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.hasCommandType = true;
        result.commandType_ = value;
        return this;
      }
      public Builder clearCommandType() {
        result.hasCommandType = false;
        result.commandType_ = com.notifier.protocol.Protocol.CommandRequest.CommandType.CALL;
        return this;
      }
      
      // optional .android_notifier.CommandRequest.CallOptions call_options = 10;
      public boolean hasCallOptions() {
        return result.hasCallOptions();
      }
      public com.notifier.protocol.Protocol.CommandRequest.CallOptions getCallOptions() {
        return result.getCallOptions();
      }
      public Builder setCallOptions(com.notifier.protocol.Protocol.CommandRequest.CallOptions value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.hasCallOptions = true;
        result.callOptions_ = value;
        return this;
      }
      public Builder setCallOptions(com.notifier.protocol.Protocol.CommandRequest.CallOptions.Builder builderForValue) {
        result.hasCallOptions = true;
        result.callOptions_ = builderForValue.build();
        return this;
      }
      public Builder mergeCallOptions(com.notifier.protocol.Protocol.CommandRequest.CallOptions value) {
        if (result.hasCallOptions() &&
            result.callOptions_ != com.notifier.protocol.Protocol.CommandRequest.CallOptions.getDefaultInstance()) {
          result.callOptions_ =
            com.notifier.protocol.Protocol.CommandRequest.CallOptions.newBuilder(result.callOptions_).mergeFrom(value).buildPartial();
        } else {
          result.callOptions_ = value;
        }
        result.hasCallOptions = true;
        return this;
      }
      public Builder clearCallOptions() {
        result.hasCallOptions = false;
        result.callOptions_ = com.notifier.protocol.Protocol.CommandRequest.CallOptions.getDefaultInstance();
        return this;
      }
      
      // optional .android_notifier.CommandRequest.SmsOptions sms_options = 11;
      public boolean hasSmsOptions() {
        return result.hasSmsOptions();
      }
      public com.notifier.protocol.Protocol.CommandRequest.SmsOptions getSmsOptions() {
        return result.getSmsOptions();
      }
      public Builder setSmsOptions(com.notifier.protocol.Protocol.CommandRequest.SmsOptions value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.hasSmsOptions = true;
        result.smsOptions_ = value;
        return this;
      }
      public Builder setSmsOptions(com.notifier.protocol.Protocol.CommandRequest.SmsOptions.Builder builderForValue) {
        result.hasSmsOptions = true;
        result.smsOptions_ = builderForValue.build();
        return this;
      }
      public Builder mergeSmsOptions(com.notifier.protocol.Protocol.CommandRequest.SmsOptions value) {
        if (result.hasSmsOptions() &&
            result.smsOptions_ != com.notifier.protocol.Protocol.CommandRequest.SmsOptions.getDefaultInstance()) {
          result.smsOptions_ =
            com.notifier.protocol.Protocol.CommandRequest.SmsOptions.newBuilder(result.smsOptions_).mergeFrom(value).buildPartial();
        } else {
          result.smsOptions_ = value;
        }
        result.hasSmsOptions = true;
        return this;
      }
      public Builder clearSmsOptions() {
        result.hasSmsOptions = false;
        result.smsOptions_ = com.notifier.protocol.Protocol.CommandRequest.SmsOptions.getDefaultInstance();
        return this;
      }
      
      // optional .android_notifier.CommandRequest.QueryOptions query_options = 12;
      public boolean hasQueryOptions() {
        return result.hasQueryOptions();
      }
      public com.notifier.protocol.Protocol.CommandRequest.QueryOptions getQueryOptions() {
        return result.getQueryOptions();
      }
      public Builder setQueryOptions(com.notifier.protocol.Protocol.CommandRequest.QueryOptions value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.hasQueryOptions = true;
        result.queryOptions_ = value;
        return this;
      }
      public Builder setQueryOptions(com.notifier.protocol.Protocol.CommandRequest.QueryOptions.Builder builderForValue) {
        result.hasQueryOptions = true;
        result.queryOptions_ = builderForValue.build();
        return this;
      }
      public Builder mergeQueryOptions(com.notifier.protocol.Protocol.CommandRequest.QueryOptions value) {
        if (result.hasQueryOptions() &&
            result.queryOptions_ != com.notifier.protocol.Protocol.CommandRequest.QueryOptions.getDefaultInstance()) {
          result.queryOptions_ =
            com.notifier.protocol.Protocol.CommandRequest.QueryOptions.newBuilder(result.queryOptions_).mergeFrom(value).buildPartial();
        } else {
          result.queryOptions_ = value;
        }
        result.hasQueryOptions = true;
        return this;
      }
      public Builder clearQueryOptions() {
        result.hasQueryOptions = false;
        result.queryOptions_ = com.notifier.protocol.Protocol.CommandRequest.QueryOptions.getDefaultInstance();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:android_notifier.CommandRequest)
    }
    
    static {
      defaultInstance = new CommandRequest(true);
      com.notifier.protocol.Protocol.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:android_notifier.CommandRequest)
  }
  
  public static final class CommandResponse extends
      com.google.protobuf.GeneratedMessageLite {
    // Use CommandResponse.newBuilder() to construct.
    private CommandResponse() {
      initFields();
    }
    private CommandResponse(boolean noInit) {}
    
    private static final CommandResponse defaultInstance;
    public static CommandResponse getDefaultInstance() {
      return defaultInstance;
    }
    
    public CommandResponse getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final class SearchResults extends
        com.google.protobuf.GeneratedMessageLite {
      // Use SearchResults.newBuilder() to construct.
      private SearchResults() {
        initFields();
      }
      private SearchResults(boolean noInit) {}
      
      private static final SearchResults defaultInstance;
      public static SearchResults getDefaultInstance() {
        return defaultInstance;
      }
      
      public SearchResults getDefaultInstanceForType() {
        return defaultInstance;
      }
      
      // repeated .android_notifier.Contact contacts = 1;
      public static final int CONTACTS_FIELD_NUMBER = 1;
      private java.util.List<com.notifier.protocol.Protocol.Contact> contacts_ =
        java.util.Collections.emptyList();
      public java.util.List<com.notifier.protocol.Protocol.Contact> getContactsList() {
        return contacts_;
      }
      public int getContactsCount() { return contacts_.size(); }
      public com.notifier.protocol.Protocol.Contact getContacts(int index) {
        return contacts_.get(index);
      }
      
      private void initFields() {
      }
      public final boolean isInitialized() {
        for (com.notifier.protocol.Protocol.Contact element : getContactsList()) {
          if (!element.isInitialized()) return false;
        }
        return true;
      }
      
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        for (com.notifier.protocol.Protocol.Contact element : getContactsList()) {
          output.writeMessage(1, element);
        }
      }
      
      private int memoizedSerializedSize = -1;
      public int getSerializedSize() {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
      
        size = 0;
        for (com.notifier.protocol.Protocol.Contact element : getContactsList()) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(1, element);
        }
        memoizedSerializedSize = size;
        return size;
      }
      
      public static com.notifier.protocol.Protocol.CommandResponse.SearchResults parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static com.notifier.protocol.Protocol.CommandResponse.SearchResults parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static com.notifier.protocol.Protocol.CommandResponse.SearchResults parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static com.notifier.protocol.Protocol.CommandResponse.SearchResults parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static com.notifier.protocol.Protocol.CommandResponse.SearchResults parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static com.notifier.protocol.Protocol.CommandResponse.SearchResults parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      public static com.notifier.protocol.Protocol.CommandResponse.SearchResults parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static com.notifier.protocol.Protocol.CommandResponse.SearchResults parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static com.notifier.protocol.Protocol.CommandResponse.SearchResults parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static com.notifier.protocol.Protocol.CommandResponse.SearchResults parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      
      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(com.notifier.protocol.Protocol.CommandResponse.SearchResults prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() { return newBuilder(this); }
      
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageLite.Builder<
            com.notifier.protocol.Protocol.CommandResponse.SearchResults, Builder> {
        private com.notifier.protocol.Protocol.CommandResponse.SearchResults result;
        
        // Construct using com.notifier.protocol.Protocol.CommandResponse.SearchResults.newBuilder()
        private Builder() {}
        
        private static Builder create() {
          Builder builder = new Builder();
          builder.result = new com.notifier.protocol.Protocol.CommandResponse.SearchResults();
          return builder;
        }
        
        protected com.notifier.protocol.Protocol.CommandResponse.SearchResults internalGetResult() {
          return result;
        }
        
        public Builder clear() {
          if (result == null) {
            throw new IllegalStateException(
              "Cannot call clear() after build().");
          }
          result = new com.notifier.protocol.Protocol.CommandResponse.SearchResults();
          return this;
        }
        
        public Builder clone() {
          return create().mergeFrom(result);
        }
        
        public com.notifier.protocol.Protocol.CommandResponse.SearchResults getDefaultInstanceForType() {
          return com.notifier.protocol.Protocol.CommandResponse.SearchResults.getDefaultInstance();
        }
        
        public boolean isInitialized() {
          return result.isInitialized();
        }
        public com.notifier.protocol.Protocol.CommandResponse.SearchResults build() {
          if (result != null && !isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return buildPartial();
        }
        
        private com.notifier.protocol.Protocol.CommandResponse.SearchResults buildParsed()
            throws com.google.protobuf.InvalidProtocolBufferException {
          if (!isInitialized()) {
            throw newUninitializedMessageException(
              result).asInvalidProtocolBufferException();
          }
          return buildPartial();
        }
        
        public com.notifier.protocol.Protocol.CommandResponse.SearchResults buildPartial() {
          if (result == null) {
            throw new IllegalStateException(
              "build() has already been called on this Builder.");
          }
          if (result.contacts_ != java.util.Collections.EMPTY_LIST) {
            result.contacts_ =
              java.util.Collections.unmodifiableList(result.contacts_);
          }
          com.notifier.protocol.Protocol.CommandResponse.SearchResults returnMe = result;
          result = null;
          return returnMe;
        }
        
        public Builder mergeFrom(com.notifier.protocol.Protocol.CommandResponse.SearchResults other) {
          if (other == com.notifier.protocol.Protocol.CommandResponse.SearchResults.getDefaultInstance()) return this;
          if (!other.contacts_.isEmpty()) {
            if (result.contacts_.isEmpty()) {
              result.contacts_ = new java.util.ArrayList<com.notifier.protocol.Protocol.Contact>();
            }
            result.contacts_.addAll(other.contacts_);
          }
          return this;
        }
        
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          while (true) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                return this;
              default: {
                if (!parseUnknownField(input, extensionRegistry, tag)) {
                  return this;
                }
                break;
              }
              case 10: {
                com.notifier.protocol.Protocol.Contact.Builder subBuilder = com.notifier.protocol.Protocol.Contact.newBuilder();
                input.readMessage(subBuilder, extensionRegistry);
                addContacts(subBuilder.buildPartial());
                break;
              }
            }
          }
        }
        
        
        // repeated .android_notifier.Contact contacts = 1;
        public java.util.List<com.notifier.protocol.Protocol.Contact> getContactsList() {
          return java.util.Collections.unmodifiableList(result.contacts_);
        }
        public int getContactsCount() {
          return result.getContactsCount();
        }
        public com.notifier.protocol.Protocol.Contact getContacts(int index) {
          return result.getContacts(index);
        }
        public Builder setContacts(int index, com.notifier.protocol.Protocol.Contact value) {
          if (value == null) {
            throw new NullPointerException();
          }
          result.contacts_.set(index, value);
          return this;
        }
        public Builder setContacts(int index, com.notifier.protocol.Protocol.Contact.Builder builderForValue) {
          result.contacts_.set(index, builderForValue.build());
          return this;
        }
        public Builder addContacts(com.notifier.protocol.Protocol.Contact value) {
          if (value == null) {
            throw new NullPointerException();
          }
          if (result.contacts_.isEmpty()) {
            result.contacts_ = new java.util.ArrayList<com.notifier.protocol.Protocol.Contact>();
          }
          result.contacts_.add(value);
          return this;
        }
        public Builder addContacts(com.notifier.protocol.Protocol.Contact.Builder builderForValue) {
          if (result.contacts_.isEmpty()) {
            result.contacts_ = new java.util.ArrayList<com.notifier.protocol.Protocol.Contact>();
          }
          result.contacts_.add(builderForValue.build());
          return this;
        }
        public Builder addAllContacts(
            java.lang.Iterable<? extends com.notifier.protocol.Protocol.Contact> values) {
          if (result.contacts_.isEmpty()) {
            result.contacts_ = new java.util.ArrayList<com.notifier.protocol.Protocol.Contact>();
          }
          super.addAll(values, result.contacts_);
          return this;
        }
        public Builder clearContacts() {
          result.contacts_ = java.util.Collections.emptyList();
          return this;
        }
        
        // @@protoc_insertion_point(builder_scope:android_notifier.CommandResponse.SearchResults)
      }
      
      static {
        defaultInstance = new SearchResults(true);
        com.notifier.protocol.Protocol.internalForceInit();
        defaultInstance.initFields();
      }
      
      // @@protoc_insertion_point(class_scope:android_notifier.CommandResponse.SearchResults)
    }
    
    // required fixed64 device_id = 1;
    public static final int DEVICE_ID_FIELD_NUMBER = 1;
    private boolean hasDeviceId;
    private long deviceId_ = 0L;
    public boolean hasDeviceId() { return hasDeviceId; }
    public long getDeviceId() { return deviceId_; }
    
    // required fixed64 command_id = 2;
    public static final int COMMAND_ID_FIELD_NUMBER = 2;
    private boolean hasCommandId;
    private long commandId_ = 0L;
    public boolean hasCommandId() { return hasCommandId; }
    public long getCommandId() { return commandId_; }
    
    // optional bool success = 3 [default = false];
    public static final int SUCCESS_FIELD_NUMBER = 3;
    private boolean hasSuccess;
    private boolean success_ = false;
    public boolean hasSuccess() { return hasSuccess; }
    public boolean getSuccess() { return success_; }
    
    // optional string errorMessage = 4;
    public static final int ERRORMESSAGE_FIELD_NUMBER = 4;
    private boolean hasErrorMessage;
    private java.lang.String errorMessage_ = "";
    public boolean hasErrorMessage() { return hasErrorMessage; }
    public java.lang.String getErrorMessage() { return errorMessage_; }
    
    // optional .android_notifier.CommandResponse.SearchResults search_results = 10;
    public static final int SEARCH_RESULTS_FIELD_NUMBER = 10;
    private boolean hasSearchResults;
    private com.notifier.protocol.Protocol.CommandResponse.SearchResults searchResults_;
    public boolean hasSearchResults() { return hasSearchResults; }
    public com.notifier.protocol.Protocol.CommandResponse.SearchResults getSearchResults() { return searchResults_; }
    
    private void initFields() {
      searchResults_ = com.notifier.protocol.Protocol.CommandResponse.SearchResults.getDefaultInstance();
    }
    public final boolean isInitialized() {
      if (!hasDeviceId) return false;
      if (!hasCommandId) return false;
      if (hasSearchResults()) {
        if (!getSearchResults().isInitialized()) return false;
      }
      return true;
    }
    
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasDeviceId()) {
        output.writeFixed64(1, getDeviceId());
      }
      if (hasCommandId()) {
        output.writeFixed64(2, getCommandId());
      }
      if (hasSuccess()) {
        output.writeBool(3, getSuccess());
      }
      if (hasErrorMessage()) {
        output.writeString(4, getErrorMessage());
      }
      if (hasSearchResults()) {
        output.writeMessage(10, getSearchResults());
      }
    }
    
    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasDeviceId()) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed64Size(1, getDeviceId());
      }
      if (hasCommandId()) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed64Size(2, getCommandId());
      }
      if (hasSuccess()) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(3, getSuccess());
      }
      if (hasErrorMessage()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(4, getErrorMessage());
      }
      if (hasSearchResults()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(10, getSearchResults());
      }
      memoizedSerializedSize = size;
      return size;
    }
    
    public static com.notifier.protocol.Protocol.CommandResponse parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static com.notifier.protocol.Protocol.CommandResponse parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static com.notifier.protocol.Protocol.CommandResponse parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static com.notifier.protocol.Protocol.CommandResponse parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static com.notifier.protocol.Protocol.CommandResponse parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static com.notifier.protocol.Protocol.CommandResponse parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static com.notifier.protocol.Protocol.CommandResponse parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static com.notifier.protocol.Protocol.CommandResponse parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static com.notifier.protocol.Protocol.CommandResponse parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static com.notifier.protocol.Protocol.CommandResponse parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.notifier.protocol.Protocol.CommandResponse prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageLite.Builder<
          com.notifier.protocol.Protocol.CommandResponse, Builder> {
      private com.notifier.protocol.Protocol.CommandResponse result;
      
      // Construct using com.notifier.protocol.Protocol.CommandResponse.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new com.notifier.protocol.Protocol.CommandResponse();
        return builder;
      }
      
      protected com.notifier.protocol.Protocol.CommandResponse internalGetResult() {
        return result;
      }
      
      public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new com.notifier.protocol.Protocol.CommandResponse();
        return this;
      }
      
      public Builder clone() {
        return create().mergeFrom(result);
      }
      
      public com.notifier.protocol.Protocol.CommandResponse getDefaultInstanceForType() {
        return com.notifier.protocol.Protocol.CommandResponse.getDefaultInstance();
      }
      
      public boolean isInitialized() {
        return result.isInitialized();
      }
      public com.notifier.protocol.Protocol.CommandResponse build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private com.notifier.protocol.Protocol.CommandResponse buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      public com.notifier.protocol.Protocol.CommandResponse buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        com.notifier.protocol.Protocol.CommandResponse returnMe = result;
        result = null;
        return returnMe;
      }
      
      public Builder mergeFrom(com.notifier.protocol.Protocol.CommandResponse other) {
        if (other == com.notifier.protocol.Protocol.CommandResponse.getDefaultInstance()) return this;
        if (other.hasDeviceId()) {
          setDeviceId(other.getDeviceId());
        }
        if (other.hasCommandId()) {
          setCommandId(other.getCommandId());
        }
        if (other.hasSuccess()) {
          setSuccess(other.getSuccess());
        }
        if (other.hasErrorMessage()) {
          setErrorMessage(other.getErrorMessage());
        }
        if (other.hasSearchResults()) {
          mergeSearchResults(other.getSearchResults());
        }
        return this;
      }
      
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              return this;
            default: {
              if (!parseUnknownField(input, extensionRegistry, tag)) {
                return this;
              }
              break;
            }
            case 9: {
              setDeviceId(input.readFixed64());
              break;
            }
            case 17: {
              setCommandId(input.readFixed64());
              break;
            }
            case 24: {
              setSuccess(input.readBool());
              break;
            }
            case 34: {
              setErrorMessage(input.readString());
              break;
            }
            case 82: {
              com.notifier.protocol.Protocol.CommandResponse.SearchResults.Builder subBuilder = com.notifier.protocol.Protocol.CommandResponse.SearchResults.newBuilder();
              if (hasSearchResults()) {
                subBuilder.mergeFrom(getSearchResults());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setSearchResults(subBuilder.buildPartial());
              break;
            }
          }
        }
      }
      
      
      // required fixed64 device_id = 1;
      public boolean hasDeviceId() {
        return result.hasDeviceId();
      }
      public long getDeviceId() {
        return result.getDeviceId();
      }
      public Builder setDeviceId(long value) {
        result.hasDeviceId = true;
        result.deviceId_ = value;
        return this;
      }
      public Builder clearDeviceId() {
        result.hasDeviceId = false;
        result.deviceId_ = 0L;
        return this;
      }
      
      // required fixed64 command_id = 2;
      public boolean hasCommandId() {
        return result.hasCommandId();
      }
      public long getCommandId() {
        return result.getCommandId();
      }
      public Builder setCommandId(long value) {
        result.hasCommandId = true;
        result.commandId_ = value;
        return this;
      }
      public Builder clearCommandId() {
        result.hasCommandId = false;
        result.commandId_ = 0L;
        return this;
      }
      
      // optional bool success = 3 [default = false];
      public boolean hasSuccess() {
        return result.hasSuccess();
      }
      public boolean getSuccess() {
        return result.getSuccess();
      }
      public Builder setSuccess(boolean value) {
        result.hasSuccess = true;
        result.success_ = value;
        return this;
      }
      public Builder clearSuccess() {
        result.hasSuccess = false;
        result.success_ = false;
        return this;
      }
      
      // optional string errorMessage = 4;
      public boolean hasErrorMessage() {
        return result.hasErrorMessage();
      }
      public java.lang.String getErrorMessage() {
        return result.getErrorMessage();
      }
      public Builder setErrorMessage(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasErrorMessage = true;
        result.errorMessage_ = value;
        return this;
      }
      public Builder clearErrorMessage() {
        result.hasErrorMessage = false;
        result.errorMessage_ = getDefaultInstance().getErrorMessage();
        return this;
      }
      
      // optional .android_notifier.CommandResponse.SearchResults search_results = 10;
      public boolean hasSearchResults() {
        return result.hasSearchResults();
      }
      public com.notifier.protocol.Protocol.CommandResponse.SearchResults getSearchResults() {
        return result.getSearchResults();
      }
      public Builder setSearchResults(com.notifier.protocol.Protocol.CommandResponse.SearchResults value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.hasSearchResults = true;
        result.searchResults_ = value;
        return this;
      }
      public Builder setSearchResults(com.notifier.protocol.Protocol.CommandResponse.SearchResults.Builder builderForValue) {
        result.hasSearchResults = true;
        result.searchResults_ = builderForValue.build();
        return this;
      }
      public Builder mergeSearchResults(com.notifier.protocol.Protocol.CommandResponse.SearchResults value) {
        if (result.hasSearchResults() &&
            result.searchResults_ != com.notifier.protocol.Protocol.CommandResponse.SearchResults.getDefaultInstance()) {
          result.searchResults_ =
            com.notifier.protocol.Protocol.CommandResponse.SearchResults.newBuilder(result.searchResults_).mergeFrom(value).buildPartial();
        } else {
          result.searchResults_ = value;
        }
        result.hasSearchResults = true;
        return this;
      }
      public Builder clearSearchResults() {
        result.hasSearchResults = false;
        result.searchResults_ = com.notifier.protocol.Protocol.CommandResponse.SearchResults.getDefaultInstance();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:android_notifier.CommandResponse)
    }
    
    static {
      defaultInstance = new CommandResponse(true);
      com.notifier.protocol.Protocol.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:android_notifier.CommandResponse)
  }
  
  
  static {
  }
  
  public static void internalForceInit() {}
  
  // @@protoc_insertion_point(outer_class_scope)
}
